package com.chen.script.job;

import cn.hutool.core.io.FileUtil;
import com.chen.base.utils.StreamUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Slf4j
public abstract class AbstractJob {

    /**
     * 保留指定days数量的文件目录数
     * 如：days = 2, 则保留近期两份的备份数据, 删除其他的备份数据
     * @param days 指定保留的数目
     * @param targetDir 目标目录
     */
    public void delBackFileData(int days, String targetDir){
        if (days != -1){
            File[] bakFiles = new File(targetDir).listFiles();
            if (bakFiles != null){
                List<File> dirFile = Stream.of(bakFiles).filter(File::isDirectory).collect(Collectors.toList());
                dirFile = StreamUtil.sort(dirFile, f -> {
                    long ts = 0;
                    try {
                        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                        ts = format.parse(f.getName()).getTime();
                    } catch (ParseException ignored) { }
                    return ts;
                }, true);

                if (dirFile.size() > days){
                    dirFile = dirFile.subList(0, dirFile.size() - days);
                    for (File file : dirFile) {
                        log.info("删除多余备份: {}", file.getPath());
                        FileUtil.del(file);
                    }
                }
            }
        }
    }
}
